//DECLARAÇÃO DA INTERFACE

//Toda interface é implicitamente pública e abstrata.
//Qualquer uma das formas abaixo compila

//public abstract interface Foo {}
//public interface Foo {
//abstract interface Foo {}
//interface Foo{}


//Nenhuma das abaixo funciona

//private interface Foo{}
//protected interface Foo {}
interface Foo {
//Mensagem do compilador: "error: modifier private not allowed here"

//final interface Foo {}
//Mensagem do compilador: "error: illegal combination of modifiers: interface and final"

//------------------------------------------------------------------------
//ATRIBUTOS
//Todos os atributos de uma interface são implicitamente públic, static e final

//Todas as formas abaixo funcionam
	public static final int CONST = 1;
	public final int CONSTANT = 2;
	public static int CONSTANTE = 3;


//------------------------------------------------------------------------
//MÉTODOS

//Todos os métodos são implicitamente public a abstract
//Todas as formas abaixo compilam

	public abstract void executa();
	
	public void execute();
	
	abstract void excuteNow();
	
	
	//PEGADINHA LEGAL: No método excuteNow(), se você não atribuir o públic, lembre-se que a implementação deve declarar.
	
	
	
//Nenhuma das formas abaixo funciona
	//final void run();
	//protected void runAs();
	//private void r();
//Menagem: "error: modifier final not allowed here"
}
